<html>
<head><meta charset="utf-8"><title>Idea: Why not run bors queue multiple jobs together? · t-infra · Zulip Chat Archive</title></head>
<h2>Stream: <a href="https://rust-lang.github.io/zulip_archive/stream/242791-t-infra/index.html">t-infra</a></h2>
<h3>Topic: <a href="https://rust-lang.github.io/zulip_archive/stream/242791-t-infra/topic/Idea.3A.20Why.20not.20run.20bors.20queue.20multiple.20jobs.20together.3F.html">Idea: Why not run bors queue multiple jobs together?</a></h3>

<hr>

<base href="https://rust-lang.zulipchat.com">

<head><link href="https://rust-lang.github.io/zulip_archive/style.css" rel="stylesheet"></head>

<a name="242729836"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/242791-t-infra/topic/Idea%3A%20Why%20not%20run%20bors%20queue%20multiple%20jobs%20together%3F/near/242729836" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Charles Lew <a href="https://rust-lang.github.io/zulip_archive/stream/242791-t-infra/topic/Idea.3A.20Why.20not.20run.20bors.20queue.20multiple.20jobs.20together.3F.html#242729836">(Jun 15 2021 at 13:13)</a>:</h4>
<p>Currently bors queue lands prs one by one, however when a previous job is running the merged commit is already created, and actually it is possible to merge next job onto that and create a "upcoming" ci job... So if there's enough machines, multiple jobs can actually run together (optimistically), right?</p>



<a name="242730002"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/242791-t-infra/topic/Idea%3A%20Why%20not%20run%20bors%20queue%20multiple%20jobs%20together%3F/near/242730002" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Pietro Albini <a href="https://rust-lang.github.io/zulip_archive/stream/242791-t-infra/topic/Idea.3A.20Why.20not.20run.20bors.20queue.20multiple.20jobs.20together.3F.html#242730002">(Jun 15 2021 at 13:14)</a>:</h4>
<p>we don't have enough concurrency for that :(</p>



<a name="242731169"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/242791-t-infra/topic/Idea%3A%20Why%20not%20run%20bors%20queue%20multiple%20jobs%20together%3F/near/242731169" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> pnkfelix <a href="https://rust-lang.github.io/zulip_archive/stream/242791-t-infra/topic/Idea.3A.20Why.20not.20run.20bors.20queue.20multiple.20jobs.20together.3F.html#242731169">(Jun 15 2021 at 13:23)</a>:</h4>
<p><span class="user-mention" data-user-id="121055">@Pietro Albini</span> just to clarify what you mean by “not enough concurrency”: Do you mean we don’t have machine capacity (i.e., the “if there’s enough machines” in <span class="user-mention" data-user-id="116458">@Charles Lew</span> ’s message is a false precondition)? Or do you mean that our CI infrastructure isn’t well set up to <em>express</em> the spawning of the parallel work here?</p>



<a name="242731216"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/242791-t-infra/topic/Idea%3A%20Why%20not%20run%20bors%20queue%20multiple%20jobs%20together%3F/near/242731216" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Pietro Albini <a href="https://rust-lang.github.io/zulip_archive/stream/242791-t-infra/topic/Idea.3A.20Why.20not.20run.20bors.20queue.20multiple.20jobs.20together.3F.html#242731216">(Jun 15 2021 at 13:23)</a>:</h4>
<p>kinda both</p>



<a name="242731291"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/242791-t-infra/topic/Idea%3A%20Why%20not%20run%20bors%20queue%20multiple%20jobs%20together%3F/near/242731291" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Pietro Albini <a href="https://rust-lang.github.io/zulip_archive/stream/242791-t-infra/topic/Idea.3A.20Why.20not.20run.20bors.20queue.20multiple.20jobs.20together.3F.html#242731291">(Jun 15 2021 at 13:24)</a>:</h4>
<p>support in bors would have to be implemented, but we would also get over our GHA concurrency limit IIRC</p>



<a name="242731299"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/242791-t-infra/topic/Idea%3A%20Why%20not%20run%20bors%20queue%20multiple%20jobs%20together%3F/near/242731299" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> simulacrum <a href="https://rust-lang.github.io/zulip_archive/stream/242791-t-infra/topic/Idea.3A.20Why.20not.20run.20bors.20queue.20multiple.20jobs.20together.3F.html#242731299">(Jun 15 2021 at 13:24)</a>:</h4>
<p>bors can't do it to my knowledge (would need impl work, possibly non trivial), and we don't currently have good monitoring of the concurrency we <em>are</em> using, so making judgements there is hard, but generally we've been on the "try to not use too much more"</p>



<a name="242731713"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/242791-t-infra/topic/Idea%3A%20Why%20not%20run%20bors%20queue%20multiple%20jobs%20together%3F/near/242731713" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> pnkfelix <a href="https://rust-lang.github.io/zulip_archive/stream/242791-t-infra/topic/Idea.3A.20Why.20not.20run.20bors.20queue.20multiple.20jobs.20together.3F.html#242731713">(Jun 15 2021 at 13:27)</a>:</h4>
<p>Hmm. I’d <em>like</em> to believe that both of these problems are solvable. (Now, as to whether this kind of "speculative bors run” would actually pay off, that’s a different matter… <span aria-label="smile" class="emoji emoji-1f642" role="img" title="smile">:smile:</span>)</p>



<a name="242731745"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/242791-t-infra/topic/Idea%3A%20Why%20not%20run%20bors%20queue%20multiple%20jobs%20together%3F/near/242731745" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Pietro Albini <a href="https://rust-lang.github.io/zulip_archive/stream/242791-t-infra/topic/Idea.3A.20Why.20not.20run.20bors.20queue.20multiple.20jobs.20together.3F.html#242731745">(Jun 15 2021 at 13:27)</a>:</h4>
<p>well, yes, but I really doubt infra has the capacity to tackle any of those right now :(</p>



<a name="242738273"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/242791-t-infra/topic/Idea%3A%20Why%20not%20run%20bors%20queue%20multiple%20jobs%20together%3F/near/242738273" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nagisa <a href="https://rust-lang.github.io/zulip_archive/stream/242791-t-infra/topic/Idea.3A.20Why.20not.20run.20bors.20queue.20multiple.20jobs.20together.3F.html#242738273">(Jun 15 2021 at 14:11)</a>:</h4>
<p>There was a CI product which provided guarantees much like what bors does, but was able to run multiple CI jobs at once, still.</p>



<a name="242738512"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/242791-t-infra/topic/Idea%3A%20Why%20not%20run%20bors%20queue%20multiple%20jobs%20together%3F/near/242738512" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nagisa <a href="https://rust-lang.github.io/zulip_archive/stream/242791-t-infra/topic/Idea.3A.20Why.20not.20run.20bors.20queue.20multiple.20jobs.20together.3F.html#242738512">(Jun 15 2021 at 14:13)</a>:</h4>
<p>I recall it also had a kind of feature that allowed it to test multiple merges by running the last one and in case of the failure automatically discovering which of the merges introduced a fault and automatically removed it.</p>



<a name="242738554"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/242791-t-infra/topic/Idea%3A%20Why%20not%20run%20bors%20queue%20multiple%20jobs%20together%3F/near/242738554" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nagisa <a href="https://rust-lang.github.io/zulip_archive/stream/242791-t-infra/topic/Idea.3A.20Why.20not.20run.20bors.20queue.20multiple.20jobs.20together.3F.html#242738554">(Jun 15 2021 at 14:13)</a>:</h4>
<p>Would be great if I remembered the name/website though, wouldn't need to recite what it did from memory T_T.</p>



<a name="242738842"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/242791-t-infra/topic/Idea%3A%20Why%20not%20run%20bors%20queue%20multiple%20jobs%20together%3F/near/242738842" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nagisa <a href="https://rust-lang.github.io/zulip_archive/stream/242791-t-infra/topic/Idea.3A.20Why.20not.20run.20bors.20queue.20multiple.20jobs.20together.3F.html#242738842">(Jun 15 2021 at 14:15)</a>:</h4>
<p><a href="https://zuul-ci.org/docs/zuul/discussion/gating.html">https://zuul-ci.org/docs/zuul/discussion/gating.html</a> maybe?</p>



<a name="242739480"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/242791-t-infra/topic/Idea%3A%20Why%20not%20run%20bors%20queue%20multiple%20jobs%20together%3F/near/242739480" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Alex Gaynor <a href="https://rust-lang.github.io/zulip_archive/stream/242791-t-infra/topic/Idea.3A.20Why.20not.20run.20bors.20queue.20multiple.20jobs.20together.3F.html#242739480">(Jun 15 2021 at 14:19)</a>:</h4>
<p>Yeah, zuul is what you're thinking of. It was originally developed for OpenStack, and still primarily used by them, though the Zuul devs would love it if it were more widely used. (In a former life I worked on OpenStack, and Zuul providesr arm64 testing for the pyca/cryptography project nowadays.)</p>



<a name="242744407"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/242791-t-infra/topic/Idea%3A%20Why%20not%20run%20bors%20queue%20multiple%20jobs%20together%3F/near/242744407" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> pnkfelix <a href="https://rust-lang.github.io/zulip_archive/stream/242791-t-infra/topic/Idea.3A.20Why.20not.20run.20bors.20queue.20multiple.20jobs.20together.3F.html#242744407">(Jun 15 2021 at 14:51)</a>:</h4>
<p><span class="user-mention silent" data-user-id="121055">Pietro Albini</span> <a href="#narrow/stream/242791-t-infra/topic/Idea.3A.20Why.20not.20run.20bors.20queue.20multiple.20jobs.20together.3F/near/242731745">said</a>:</p>
<blockquote>
<p>well, yes, but I really doubt infra has the capacity to tackle any of those right now :(</p>
</blockquote>
<p>I understand that completely.</p>



<a name="242752498"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/242791-t-infra/topic/Idea%3A%20Why%20not%20run%20bors%20queue%20multiple%20jobs%20together%3F/near/242752498" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> The 8472 <a href="https://rust-lang.github.io/zulip_archive/stream/242791-t-infra/topic/Idea.3A.20Why.20not.20run.20bors.20queue.20multiple.20jobs.20together.3F.html#242752498">(Jun 15 2021 at 15:36)</a>:</h4>
<p>How would that be different from rollups? That it's automated?</p>



<a name="242754312"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/242791-t-infra/topic/Idea%3A%20Why%20not%20run%20bors%20queue%20multiple%20jobs%20together%3F/near/242754312" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nagisa <a href="https://rust-lang.github.io/zulip_archive/stream/242791-t-infra/topic/Idea.3A.20Why.20not.20run.20bors.20queue.20multiple.20jobs.20together.3F.html#242754312">(Jun 15 2021 at 15:48)</a>:</h4>
<p>Yeah, in many ways too: not only rollups are executed at all times, it also auto-blames merges for the cause of failure and automatically excludes them from the testing too.</p>



<a name="242754509"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/242791-t-infra/topic/Idea%3A%20Why%20not%20run%20bors%20queue%20multiple%20jobs%20together%3F/near/242754509" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nagisa <a href="https://rust-lang.github.io/zulip_archive/stream/242791-t-infra/topic/Idea.3A.20Why.20not.20run.20bors.20queue.20multiple.20jobs.20together.3F.html#242754509">(Jun 15 2021 at 15:49)</a>:</h4>
<p>In majority of the cases rollups would also be naturally much smaller, which helps with bisecting etc.</p>



<a name="242827857"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/242791-t-infra/topic/Idea%3A%20Why%20not%20run%20bors%20queue%20multiple%20jobs%20together%3F/near/242827857" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Josh Triplett <a href="https://rust-lang.github.io/zulip_archive/stream/242791-t-infra/topic/Idea.3A.20Why.20not.20run.20bors.20queue.20multiple.20jobs.20together.3F.html#242827857">(Jun 16 2021 at 03:58)</a>:</h4>
<p>So, it builds A, A+B, A+B+C, and so on, and merges all the ones that work while stopping and re-constructing if one of them fails?</p>



<a name="242854323"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/242791-t-infra/topic/Idea%3A%20Why%20not%20run%20bors%20queue%20multiple%20jobs%20together%3F/near/242854323" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nagisa <a href="https://rust-lang.github.io/zulip_archive/stream/242791-t-infra/topic/Idea.3A.20Why.20not.20run.20bors.20queue.20multiple.20jobs.20together.3F.html#242854323">(Jun 16 2021 at 09:28)</a>:</h4>
<p>If it has A, B, and C to build, it builds <code>C</code> assuming that <code>A</code> and <code>B</code> already succeeded, and if the build of <code>C</code> succeeds, it merges all three of them (i.e. a lot like a rollup). And if one of them fails, it knows how to exclude it from the chain and merge the other commits still.</p>



<a name="242854481"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/242791-t-infra/topic/Idea%3A%20Why%20not%20run%20bors%20queue%20multiple%20jobs%20together%3F/near/242854481" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nagisa <a href="https://rust-lang.github.io/zulip_archive/stream/242791-t-infra/topic/Idea.3A.20Why.20not.20run.20bors.20queue.20multiple.20jobs.20together.3F.html#242854481">(Jun 16 2021 at 09:30)</a>:</h4>
<p>That's how I understand it, anyway.</p>



<a name="242905411"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/242791-t-infra/topic/Idea%3A%20Why%20not%20run%20bors%20queue%20multiple%20jobs%20together%3F/near/242905411" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> cuviper <a href="https://rust-lang.github.io/zulip_archive/stream/242791-t-infra/topic/Idea.3A.20Why.20not.20run.20bors.20queue.20multiple.20jobs.20together.3F.html#242905411">(Jun 16 2021 at 16:24)</a>:</h4>
<p>the way it knows how / what to exclude is that is also tests the shorter chains in parallel</p>



<hr><p>Last updated: Aug 07 2021 at 22:04 UTC</p>
</html>